<?php

namespace maotool\util;

class ShellUtil
{

    /**
     * 解析命令参数
     * @param $str
     * @return array
     */
    public static function params($str)
    {
        $params = [];
        $currentParam = '';
        $inQuotes = false;
        $quoteType = '';
        $escape = false;

        for ($i = 0; $i < strlen($str); $i++) {
            $char = $str[$i];

            if ($escape) {
                // 处理转义字符
                $currentParam .= $char;
                $escape = false;
            } elseif ($inQuotes) {
                // 在引号内
                if ($char === $quoteType) {
                    // 结束引号
                    $inQuotes = false;
                } else {
                    // 普通字符或另一个转义字符
                    $currentParam .= $char;
                    if ($char === '\\') {
                        // 下一个字符可能是转义字符
                        $escape = true;
                    }
                }
            } else {
                // 不在引号内
                if ($char === '"' || $char === "'") {
                    // 开始引号
                    $inQuotes = true;
                    $quoteType = $char;
                } elseif (ctype_space($char)) {
                    // 空格分隔符，结束当前参数
                    if (!empty($currentParam)) {
                        $params[] = stripslashes($currentParam);
                        $currentParam = '';
                    }
                } else {
                    // 普通字符
                    $currentParam .= $char;
                    if ($char === '\\') {
                        // 下一个字符可能是转义字符
                        $escape = true;
                    }
                }
            }
        }

        // 添加最后一个参数（如果有）
        if (!empty($currentParam)) {
            $params[] = stripslashes($currentParam);
        }

        return $params;
    }

}